/*-------------------------------------------------------------------------
 *
 * header.h
 *		Snowball stemmer 模块的替代头文件
 *
 * Snowball stemmer 模块包含 #include "header.h"，并认为它们
 * 正在包含 snowball/libstemmer/header.h。我们调整 CPPFLAGS
 * 以便找到该文件，从而可以修改它们看到的头文件。这里的主要目的是确保在
 * 包含任何系统头文件（如 <stdio.h>）之前包含 pg_config.h；
 * 如果没有这一点，由于后端不同模块之间的大文件选项差异，我们在某些平台上会遇到可移植性问题。
 *
 * 注意：此文件不应该被包含到任何非 Snowball 源代码中！
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 *
 * src/include/snowball/header.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef SNOWBALL_HEADR_H
#define SNOWBALL_HEADR_H

/*
 * 在头文件中包含 postgres.h 违反了 Postgres 编码规范，
 * 但我们在此允许违反，因为替代方案是
 * 修改 Snowball 项目提供的机器生成的 .c 文件。
 */
#include "postgres.h"

/* 一些平台定义了MAXINT和/或MININT，导致冲突 */
#ifdef MAXINT
#undef MAXINT
#endif
#ifdef MININT
#undef MININT
#endif

/* 现在我们可以包含原始的Snowball header.h */
#include "snowball/libstemmer/header.h" /* pgrminclude 忽略 */

/*
 * 将标准内存分配接口重新定义为 pgsql 的接口。
 * 这使我们能够控制 Snowball 代码分配的内容位置。
 */
#ifdef malloc
#undef malloc
#endif
#define malloc(a)		palloc(a)

#ifdef calloc
#undef calloc
#endif
#define calloc(a,b)		palloc0((a) * (b))

#ifdef realloc
#undef realloc
#endif
#define realloc(a,b)	repalloc(a,b)

#ifdef free
#undef free
#endif
#define free(a)			pfree(a)

#endif							/* SNOWBALL_HEADR_H */
